#ifndef GRAPHICSVIEW_H
#define GRAPHICSVIEW_H

#include "facecat/stdafx.h"
#include <QGraphicsView>
#include <QGraphicsObject>
#include <QGraphicsItem>
#include <QGraphicsScene>
#include <QPainter>
#include <QMouseEvent>
#include <QWheelEvent>
#include <QKeyEvent>
#include <QLineEdit>
#include <QTimer>
#include "Win32/QtHost.h"
#include "Win32/QtPaint.h"

class FCGraphicsView;

/**
 * 自定义视图
 */
class FCUIView:public QGraphicsObject{
public:
    /**
     * 所在的QGraphicsView
     */
    FCGraphicsView *m_graphicsView;
public:
    /**
     * 构造函数
     */
    FCUIView();
    /**
     * 析构函数
     */
    virtual ~FCUIView();
    /**
     * 获取区域
     */
    QRectF boundingRect() const override;
    /**
     * 重绘方法
     */
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
};

/**
 * QGraphicsView扩展
 */
class FCGraphicsView : public QGraphicsView{
Q_OBJECT
public:
    /**
     * 绘图项
     */
    FCUIView *m_objectItem;
public:
    /**
     * 构造函数
     */
    FCGraphicsView();
    /**
     * 析构函数
     */
    virtual ~FCGraphicsView();
public:
    /**
     * 设备对接
     */
    QtHost *m_host;
    /**
     * 公共方法库
     */
    FCNative *m_native;
    /**
     * 绘图方法
     */
    QtPaint *m_paint;
    /**
     * Qt输入框
     */
    QLineEdit *m_textBox;
    /**
     * 虚拟输入框
     */
    FCView *m_editingTextBox;
    /**
     * 缩放比例
     */
    double m_scaleFactor;
    /**
     * 鼠标按钮
     */
    int m_buttons;
    /**
     * 点击次数
     */
    int m_clicks;
    /**
     * 绘图方法
     */
    void paint(QPainter *painter);
    /**
     * 鼠标按下
     */
    void mousePressEvent(QMouseEvent *event) override;
    /**
     * 鼠标松开
     */
    void mouseReleaseEvent(QMouseEvent *event) override;
    /**
     * 鼠标移动
     */
    void mouseMoveEvent(QMouseEvent *event) override;
    /**
     * 鼠标双击
     */
    void mouseDoubleClickEvent(QMouseEvent *event) override;
    /**
     * 键盘按下
     */
    void keyPressEvent(QKeyEvent *event) override;
    /**
     * 键盘松开
     */
    void keyReleaseEvent(QKeyEvent *event) override;
    /**
     * 鼠标滚轮
     */
    void wheelEvent(QWheelEvent *event) override;
    /**
     * 加载视图
     */
    void onLoad();
    /**
     * 重置大小
     */
    void resetScaleSize(FCSize clientSize);
    /**
     * 显示文本框
     */
    void showTextBox(FCView *view, FCView *lastView);
    /**
     * 隐藏文本框
     */
    void hideTextBox(FCView *view);
};



#endif // GRAPHICSVIEW_H
